Skip to content

aoにおけるメッセージング

メッセージがaoの並列コンピュート機能をどのように提供するかを学ぶ

aoでは、すべてのプロセスが並行して実行され、高度にスケーラブルな環境を作り出します。プロセス間での従来の直接関数呼び出しは実行できません。なぜなら、各プロセスが独立して非同期に動作するからです。

メッセージングは、非同期通信を可能にすることでこの問題に対処します。プロセスは、互いに直接関数を呼び出すのではなく、メッセージを送受信します。この方法により、プロセスがメッセージに応答できる柔軟で効率的な相互作用が実現し、システムのスケーラビリティと応答性が向上します。

まず、aosにおけるメッセージングの基本を探り、受信トレイに受け取ったメッセージを確認し、他のプロセスにメッセージを送信する方法を学びます。

ビデオチュートリアル

ステップ1: メッセージ構造の理解

  • メッセージの基本: aoのメッセージは、複数の値を保持できる柔軟なデータ構造であるLuaテーブルを使用して構築されます。これらのテーブル内で「Data」フィールドは重要であり、メッセージの内容やペイロードが含まれています。この構造により、プロセス間での情報の効率的な送受信が可能になり、aoのプリミティブがArweaveの基盤となる機能を活用して複雑で構成可能な操作を促進します。

    詳細な仕様については、G8wayの仕様ページを参照してください。

  • 例: { Data = "Hello from Process A!" }はシンプルなメッセージです。

ステップ2: aos CLIを開く

  • ターミナルでaosと入力して、aosコマンドラインインターフェイス(CLI)を起動します。
sh
aos

ステップ3: メッセージを送信する方法

lua
Send({ Target = "process ID", Data = "Hello World!" })
  • Send: Send関数は、aosインタラクティブ環境でグローバルに利用可能です。
  • Target: 特定のプロセスにメッセージを送信するには、メッセージにTargetフィールドを含めます。
  • Data: Dataは、受信プロセスに送信したいテキストメッセージです。この例では、メッセージは"Hello World!"です。

ステップ4: MorpheusのプロセスIDを保存する

以下で提供されたプロセスIDを使用し、変数としてMorpheusに保存します。

lua
ajrGnUq9x9-K1TY1MSiKwNWhNTbq7-IdtFa33T59b7s

Copy the process ID above and store it as a variable by running the below command in the aos CLI:

lua
Morpheus = "ajrGnUq9x9-K1TY1MSiKwNWhNTbq7-IdtFa33T59b7s"

これにより、プロセスIDがMorpheusという名前の変数として保存され、特定のプロセスIDと対話しやすくなります。

INFO

Morpheus変数を作成する際、返されるレスポンスはundefinedのみであるべきです。これは予想される動作です。変数が正常に作成されたか確認するには、Morpheusと入力してEnterを押します。保存したプロセスIDが表示されるはずです。

Morpheus変数の確認

lua
-- Check the Morpheus variable by typing `Morpheus`
 Morpheus
-- Expected Results:
ajrGnUq9x9-K1TY1MSiKwNWhNTbq7-IdtFa33T59b7s


-- If `undefined` is returned,
-- then the variable was not created successfully.

ステップ5: Morpheusにメッセージを送信する

MorpheusのプロセスIDを取得し、変数に保存した後、彼と通信する準備が整いました。これを行うには、Send関数を使用します。モーフィアス自身は、aoで実行されている並行プロセスです。彼は一連のハンドラを使用してメッセージを受信し送信します。メッセージを彼に送って、どうなるか見てみましょう。

lua
Send({ Target = Morpheus, Data = "Morpheus?" })
  • あなたのTargetMorpheusであり、これは以前にMorpheusのプロセスIDを使用して定義した変数です。
  • Dataは、Morpheusに送信したいメッセージです。この場合、メッセージは"Morpheus?"です。

期待される結果:

lua
-- Your Message Command
 Send({ Target = Morpheus, Data = "Morpheus?"})
-- Message is added to the outbox
message added to outbox
-- A New Message is received from `Morpheus`'s process ID
New Message From BWM...ulw: Data = I am here. You are f

Morpheusにメッセージを送信し、応答を受け取りましたが、完全なメッセージは読めません。次はInboxについて学び、メッセージを読む方法を見ていきましょう。

ステップ6: インボックス

Inboxは、他のプロセスからのメッセージを受信する場所です。

INFO

インボックスメッセージの詳細な表示を確認するには、メッセージの概念ページに移動してください。

インボックスに受信したメッセージがいくつあるかを確認します。

aos CLIの中で、次のコマンドを入力します:

lua
 #Inbox

チュートリアルを積極的に進めている場合、インボックスには多くのメッセージがないでしょう。しかし、aos環境で実験を行っている場合、インボックスに1つ以上のメッセージがあるかもしれません。

Example Return:

lua
-- Your Inbox Command
 #Inbox
-- The command will return the number of messages in your inbox.
4

上記の例では、返答は4となっており、インボックスに4つのメッセージがあることを示しています。

私たちは積極的にMorpheusの応答を探しているので、彼のメッセージが最後に受信されたメッセージであると仮定します。インボックスの最後のメッセージを読むには、次のコマンドを入力します:

lua
 Inbox[#Inbox].Data

このコマンドは、メッセージからデータを分離し、データの内容のみを読むことを可能にします。 The Expected Return:

lua
-- Your Inbox[x].Data Command
 Inbox[#Inbox].Data
-- The command will return the `Data` of the message.
-- Data is what usually represents the text-based message
-- received from one process to another.
I am here. You are finally awake. Are you ready to see how far the rabbit hole goes?

あなたは現在、自分のプロセスを使って、aoで実行されている別の並行プロセスであるMorpheusと通信しています。次のチュートリアルのステップに進む準備が整いました。

ステップ7: タグ付きメッセージの送信

タグの目的: aosメッセージのタグは、メッセージを効率的に分類、ルーティング、処理するために使用されます。これらはメッセージ処理において重要な役割を果たし、特に複数のプロセスや複雑なワークフローを扱う際に役立ちます。

いくつかのプロセスは、特定のタグを持つメッセージと相互作用するHandlersを使用します。たとえば、特定のタグを持つメッセージのみと相互作用するハンドラを持つプロセスがあり、これについてはチャットルームチュートリアルでの例を見ていきます。

メッセージにタグを使用する方法

Morpheusの場合、タグを使用してメッセージを分類できます。また、Morpheusは自律プロセスであるため、特定のタグを持つメッセージと相互作用できるハンドラを持っています。

メッセージにタグを追加する:

  • メッセージのDataは、別のプロセスに送信したいテキストメッセージであることは既に知っています。以前、タグなしでMorpheusにメッセージを送りましたが、彼は正確に一致するデータに対してハンドラを使用して応答しました。

Morpheusに私たちが準備ができていることを示そう

Morpheusに、タグActionと値rabbitholeを持つメッセージを送信します。

Example:

lua
Send({ Target = Morpheus, Data = "Code: rabbithole", Action = "Unlock" })

Read the message from Morpheus:

lua
Inbox[#Inbox].data

Expected Return:Morpheus Responds 2

タグを使用するための追加のヒント

  • 一貫したタグ付け: メッセージ処理をより予測可能にするために、アプリケーションに一貫したタグ付けシステムを開発しましょう。
  • タグ名: タグには明確で説明的な名前を選んでください。これにより、メッセージの目的や文脈を一目で理解しやすくなります。
  • タグのセキュリティ: タグは暗号化されず隠されないため、敏感な情報をタグとして使用しないように注意してください。

タグの高度な使用法

  • ワークフロー管理: タグは、メッセージが複数の段階やプロセスを通過するシステムにおいて、ワークフローを管理するのに役立ちます。

メッセージングに関する追加のヒント

  • メッセージ構造: より複雑なメッセージングニーズに対応するために、EpochFromNonceなどの他のフィールドも探ってみてください。
  • デバッグ: デバッグ用にメッセージを印刷するためにDump関数を使用してください。
  • セキュリティ考慮事項: メッセージの内容や処理には注意し、プライベートまたは敏感と見なされるものを送信しないでください。

結論

タグ付きメッセージの送信方法を学びました。これは、aosにおけるメッセージの分類とルーティングにおいて強力なツールです。

Morpheusは、あなたを次のステージに正式に招待しました。次のチュートリアルのステップであるチャットルームの作成に進む準備が整いました。